// fonction pour ajouter une option dans la liste
function ajouterOptionDansListe(text, id) {
	var nouvelle_option = $('<option/>', {value:text, text:text, name:'reponse'});
	optNew.before(nouvelle_option);
}

// vérifie si les champs sont remplis et ajoute la nouvelle question dans la base
// id_nom : l'id de l'élément HTML qui contient le nom de la question
// id_select : l'id de la combo qui contient les réponses possibles (ajoutées par l'admin)
function ajoutQuestionFinalisation(id_nom, id_select, id_select_regles) {
	var nom = $("#"+id_nom).val();
	var reponses = $("#"+id_select);
	
	// au moins une réponse ajoutée et le nom non vide
	if(reponses.find('option[name="reponse"]').length > 0 && nom != "") {
		var result = sendQueryJSON('ajouterQuestionFinalisation', 'type_reponse=LISTE&rang_question=10000&libelle_question='+nom+'&question_active_par_defaut=1&formulaire_question=DEVIS', 'POST');
		if(result.success) {
			$.each(reponses.find('option[name="reponse"]'), function() {
				sendQueryJSON('ajouterReponse', 'question='+result.id_question+'&type=liste&libelle='+$(this).val());
			});
			// on pete la liste, on remet la valeur par défaut dans le nom
			$("#"+id_nom).val("Nom de la question");
			$('option').remove('#'+id_select+' > option[name="reponse"]');
			
			alert('La question a été ajoutée avec succès.');
		}
	}
}

// génère le select pour le choix de la question sur laquelle mettre une règle de finalisation
function afficherQuestionsReglesFinalisation(id_select_question, liste_question) {
	var select_question = document.getElementById(id_select_question);
	ajouterFonctionsComplementaires(select_question);
	
	select_question.clearChilds();
	
	select_question.appendChild(nouvelElement('option'));
	
	for (key in liste_question) {
		// ajouts des options pour chaque questions dans le select
		select_question.appendChild(nouvelElement('option', {value:liste_question[key].question.id_question, text:liste_question[key].question.libelle_question, donnee:liste_question[key]}));
	}
}

// affiche les reponses possibles d'une question selectionnee
// id_select : le select où on choisit la question,
// id_liste_reponses : l'element où on affiche les reponses de la question
function afficherReponseReglesFinalisation(id_select, id_liste_reponses) {
	var out = document.getElementById(id_liste_reponses);
	var select = document.getElementById(id_select);
	ajouterFonctionsComplementaires(out);

	// obtention de l'élément selectionné
	var opt = select.options[select.selectedIndex];
	
	out.clearChilds();
	//form_question_affectee.style.display = 'none';
	
	// si c'est bien une question
	if(opt.value) {
		// si c'est une question de type LISTE
		if(opt.donnee.question.type_reponse == 'LISTE') {
			out.appendChild(nouvelElement('span', {textnode:'Agir en fonction de la réponse :'}));
			out.appendChild(nouvelElement('br'));
			// affichage de toutes les réponses et de leurs checkbox
			opt.donnee.checks = new Array();
			var listeReponse = new Array();
			for (key in opt.donnee.reponses) {
				var rep = opt.donnee.reponses[key];
				var el = nouvelElement('input', {type:'checkbox', name:'reponses_finalisation', value:opt.donnee.reponses[key].libelle_reponse_combo});
				var id = nouvelElement('input', {type:'hidden', name:'id_reponse_finalisation', value:opt.donnee.reponses[key].id_reponse});
				rep.htmlElement = el;
				opt.donnee.checks.push(el);
				out.appendChilds([nouvelElement('div', {name:"reponse_finalisation"}), nouvelElement('span', {textnode:opt.donnee.reponses[key].libelle_reponse_combo}), el, id, nouvelElement('br')]);
				
				listeReponse.push(rep);
			}
			/*jout = $(out);
			jout.append("<div>Calculer le prix de :<select id='categories_regles_finalisation'></select><select id='articles_regles_finalisation'></select></div><div>en sommant la réponse aux questions :<select id='select_somme_question_finalisation'></select><input type='button' id='bouton_ajouter_question_somme_repart' value='Ajouter cette question' onclick='ajouterQuestionSommeRepart(\'select_somme_question_finalisation\', \'ensemble_somme_question_finalisation\');' /></div><div id='ensemble_somme_question_finalisation'></div>");*/
			
			var reponse = new Object();
			reponse.type = 'LISTE';
			reponse.id_question = opt.donnee.question.id_question;
			reponse.all = listeReponse;
			reponse.libelle = function () {
				var premier = true;
				var libelle = '';
				for (k in listeReponse) {
					if(listeReponse[k].htmlElement.checked) {
						if(premier) premier = false; else libelle += ' ou ';
						libelle += listeReponse[k].htmlElement.value;
					}
				}
				return libelle;
			};
		}
	}
}


// permet d'afficher le récapitulatif et le bouton d'envoi pour les règles de type réponses/articles
// paramètres :
// - id_out : id de l'élément html où afficher le récapitulatif
// - id_select_article : id de l'élément html select contenant l'article séléctionné
// - id_ensemble_question : id de l'élément html contenant l'ensemble des question ajouté ainsi que de leurs coefficient
function recapitulatifRegleFinalisation(id_out, id_select_article, id_ensemble_question, id_prix_base) {
	var id_question = $("#questions_regles_finalisation").val();
	var prix_base = $("#"+id_prix_base).val();
	
	var out = $('#'+id_out);
	out.empty();
	if(id_question != "" && prix_base != "") {
		var recap = "Si l'utilisateur répond :<ul>";
		var donnee_regle = new Object();
		
		/**** ajout des questions ****/
		donnee_regle.action = new Array();
		donnee_regle.condition = new Array();
		// on parcours les reponses cochées
		$('input[name="reponses_finalisation"]:checked').each(function() {
			recap += '<li>';
			var nouvelle_reponse = {id_question:id_question, type_reponse:'LISTE'};
			nouvelle_reponse.id_reponse = $(this).nextAll("input[name='id_reponse_finalisation']:first").val();
			recap += '<span class="text_en_valeur">'+$(this).val()+'</span>';
			recap += ' à la question <span class="text_en_valeur">'+$('#questions_regles_finalisation').find("option:selected").text();+'</span></li>';
			donnee_regle.condition.push(nouvelle_reponse);
		});
		
		recap += "</ul>";
		
		/**** ajout de l'article ****/
		recap += 'alors '
		
		donnee_regle.action.fixe = false;
		donnee_regle.action.questions = new Array();
		if($('#'+id_ensemble_question+' div').children().length > 0) {
			recap += "le prix de l'article <span class=\"text_en_valeur\">"+$('#'+id_select_article+' option:selected').text()+"</span> est de <span class=\"text_en_valeur\">"+prix_base+"€</span>, auquel on ajoute les réponses aux questions suivantes :";
			recap += '<ul>';
			$('#'+id_ensemble_question+' div').each(function(indice, bloc) {
				var jbloc = $(bloc);
				var id_question = jbloc.find('input[name="question"]').val();
				var coefficient = jbloc.find('input[name="coefficient"]').val();
				recap += '<li><span class="text_en_valeur">'+jbloc.find('input[name="nom_question"]').val()+'</span> avec un coefficient de <span class="text_en_valeur">'+coefficient+'</span></li>';
				donnee_regle.action.questions.push({id_question:id_question, coefficient:coefficient});
			});
			recap += '</ul>';
		}
		else {
			recap += "le prix de l'article <span class=\"text_en_valeur\">"+$('#'+id_select_article+' option:selected').text()+"</span> est de <span class=\"text_en_valeur\">"+prix_base+"€</span>.";
		}
		
		donnee_regle.action.id_article = $('#'+id_select_article+' option:selected').val();
		
		/**** affichage du recapitulatif ****/
		out.append(recap);
		
		/**** ajout du bouton pour l'envoie a la bdd ****/
		var bouton_envoie = $('<input/>', {type:'button', value:'Enregistrer cette règle', class:'vox_bouton', click:function() {
			// on utilise l'objet 'donnee_regle' qui contient les informations suivantes :
			// .condition =>
			// [
			// 	{
			// 		id_question:((id de la question))
			// 		type_reponse : ((type de la réponse))
			// 		id_reponse : ((id de la réponse))
			// 		min : ((valeur min dans le cas de type ENTIER))
			// 		max : ((valeur max dans le cas de type ENTIER))
			// 		id_article : ((l'id de l'article dans le cas de type ARTICLE))
			// 		reponse : (('oui' ou 'non' dans le cas de type OUINON))
			// 	}
			// ]
			// .action.fixe: ((boolean permettant de savoir si c'est une valeur fixe))
			// .action.somme: ((boolean permettant de savoir si il faut faire la somme des sites ou non))
			// .action.quantite: ((la quantité de l'article à ajouter))
			// .action.id_article: ((l'id de l'article à ajouté))
			// .action.questions =>
			// [
			// 	{
			// 		id_question:((id de la question))
			// 		coefficient:((coefficient de la question))
			// 	}
			// ]
			
			// construction des id_reponses
			var id_reponses = new Array();
			
			// obtention des réponses si nécessaire
			for (var k in donnee_regle.condition) {
				if(donnee_regle.condition[k].type_reponse == 'ENTIER') {
					donnee_regle.condition[k].id_reponse =
					sendConstructedQueryJSON('ajouterReponse', {question:donnee_regle.condition[k].id_question,
																type:donnee_regle.condition[k].type_reponse,
																min:donnee_regle.condition[k].min,
																max:donnee_regle.condition[k].max,}, 'POST').id_reponse;
				}
				else if(donnee_regle.condition[k].type_reponse == 'OUINON') {
					donnee_regle.condition[k].id_reponse =
					sendConstructedQueryJSON('ajouterReponse', {question:donnee_regle.condition[k].id_question,
																type:donnee_regle.condition[k].type_reponse,
																reponse:donnee_regle.condition[k].reponse,}, 'POST').id_reponse;
				}
				id_reponses.push(donnee_regle.condition[k].id_reponse);
			}
			
			// ajout des règles dans la bdd
			var result = sendConstructedQueryJSON('ajouterRegleFinalisation',{id_article:donnee_regle.action.id_article,
																		id_reponses:id_reponses,
																		questions:donnee_regle.action.questions,
																		prix_base:prix_base}, 'POST');
			
			if(!result.success) {
				alert("Erreur : " + result.out);
			}
			else alert("La règle à été ajoutée avec succès.");
		}});
		
		out.append($('<br />'));
		out.append(bouton_envoie);
	}
}

